/*
题目：反转链表Ⅱ
给你单链表的头指针 head 和两个整数 left 和 right ，其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点，返回 反转后的链表 。
 */
public class ReverseBetweenBetter {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode dummy = new ListNode(0, head);
        ListNode prev = dummy;   //记录left左边第一个结点
        int i = 1;
        while (i < left) {
            prev = prev.next;
            i++;
        }
        head = prev.next;//可以稍微减少点计算量
        for (; i < right; i++) {
            ListNode temp = head.next;
            head.next = head.next.next;
            temp.next = prev.next; //!!注意此处不能改prev.next为head，因为head位置没变化
            prev.next = temp;
        }
        return dummy.next;
    }
}
